#pragma once
#include "Symbols/VariableSymbol.hpp"

#include <map>
#include <memory>
#include <vector>

class BoundScope;

typedef std::shared_ptr<BoundScope> SharedBoundScope;

class BoundScope
{
public:
    SharedBoundScope                            Parent;
    std::map<std::string, SharedVariableSymbol> Variables;

public:
    BoundScope(SharedBoundScope parent) : Parent(parent){};

    bool TryDeclare(SharedVariableSymbol variable);

    SharedVariableSymbol TryLookup(std::string name);

    std::vector<SharedVariableSymbol> GetDeclaredVariables();
};